package modules.menuTree;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import modules.MainModule;

import org.apache.log4j.Logger;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.sql.SqlCallback;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Param;

import common.tree.EasyUIForest;
import common.tree.EasyUITreeNode;

/**
 * 为主菜单服务到类
 * @author lost
 */
@At("/menuTree")
@IocBean
public class MenuTree extends MainModule{
	private static final Logger logger = Logger.getLogger(MenuTree.class) ;
	@At("/query")
	public Object queryTree(@Param("id") int rootId){
		/**
		 * 如果外部没有传入到rootId则返回根节点下的节点
		 * 否则则返回rootId下的节点 
		 * 不传入的时候默认为0，则根节点为0
		 */
		Sql sql = dao.sqls().create("menuTree.query") ;
		sql.setCallback(new FillJSONArray());
		sql.params().set("parentId", rootId) ;
		//转换为easyui识别的格式
		dao.execute(sql) ;
		
		String res = sql.getResult().toString() ; 
		logger.info(res) ;
		return res ;
	}
	/**
	 * @author lost
	 *
	 */
	//填充jsonarray对象的类
	private class FillJSONArray implements SqlCallback{
		@Override
		public Object invoke(Connection conn, ResultSet rs, Sql sql)
				throws SQLException {
			EasyUIForest forest = new EasyUIForest() ;
			while(rs.next()){
				EasyUITreeNode node = new EasyUITreeNode(rs.getInt("menuId"),rs.getString("menuname"));
				node.addAttribute("menuUrl", rs.getString("menuurl")) ;
				node.addAttribute("displayNo", rs.getString("displayNo")) ;
				/**
				 * GIBBSFIXME 这里是有问题的，既然这个node代表叶子节点，那么就不应该存在开启和关闭状态
				 */
				if(rs.getInt("numbers")!=0)node.setState(EasyUITreeNode.STATE_CLOSED) ;
				forest.add(node) ;
			}
			return forest;
		}//end method 
	}//end private class 
}//end outer class 